perm filename PACKMS.F4[NEW,LCS] blob
sn#594190 filedate 1981-06-17 generic text, type T, neo UTF8
C**** PACKMS.F4 -- TO PACK TOGETHER MANY MS PROGRAM FILES *****
C LOAD WITH [NEW,LCS] MSSIO.FAI,STUF.FAI
DIMENSION NAMES(635),JEXT(200),JREC(235),
1 FIRST(128),V(2000),SECOND(4000),INP(72)
C JREC(235) HAS 34 WDS FREE FOR MISC. INFO
EQUIVALENCE(JWDS,FIRST(19)),(KREC,JREC(202)),(JEXT,NAMES(201))
1 ,(JREC,NAMES(401)),(JFLAG,FIRST(128))
IREC=1
JREC(1)=6
15 FORMAT(' P(ACK), U(NPACK), R(EAD DIR.FILE), D(IRECTORY)? '$)
C**************************************************************************
C**** WHEN READING DIR.FILE 1ST 2 LINES AND LAST 2 LINES ARE IGNORED.******
C**************************************************************************
18 TYPE 15
ACCEPT 1,JWDS,K,L
IPU=0
MORE=0
IFI=0
IF(JWDS.NE.'R')GO TO 180
C NOW READ A DIRECTORY FILE FOR INPUT
IFI=-1
CALL FILE(NAMES,JEXT,JJ)
GO TO 142
180 IF(JWDS.EQ.'P')GO TO 2
INF=-1
IPU=-1
IF(JWDS.EQ.'D') IPU=-IPU
C PACK=0, UNPACK=-1, DIRECTORY=1
16 FORMAT(' TYPE PACK FILE NAME AND EXT.(DEFAULT EXT=.PAK) '$)
17 TYPE 16
ACCEPT 1,INP
X=' '
CALL NAMEXT(INP,IPAK,X)
IF(INP(1).EQ.' ')IPAK=JPAK
JPAK=IPAK
IF(X.EQ.' ')X='PAK'
IF(LOOKX(IPAK,X).EQ.0)GO TO 17
IF(IPU.GT.0)GO TO 113
1 FORMAT(72A1)
2 IF(IPU.LT.0)GO TO 41
TYPE 3
GO TO 42
41 TYPE 40
3 FORMAT(' TYPE FIRST NAME AND EXT.(DEFAULT EXT=.MS) '$)
40 FORMAT(' TYPE FIRST NAME AND EXT.(DEFAULT EXT=.MS) OR "ALL" '$)
4 FORMAT(' TYPE LAST NAME OR "ALL" (NO EXT, <CR>=1 FILE ONLY) '$)
42 ACCEPT 1,INP
KEXT=' '
CALL NAMEXT(INP,NAME,KEXT)
IF(KEXT.EQ.' ')KEXT='MS'
IF(IPU.LT.0.AND.NAME.EQ.'ALL')GO TO 122
IF(IPU.LT.0)GO TO 19
IF(LOOKX(NAME,KEXT).EQ.0)GO TO 2
19 TYPE 4
ACCEPT 1,INP
NAME2=' '
X2=' '
CALL NAMEXT(INP,NAME2,X2)
IF(NAME2.EQ.' ')NAME2=NAME
IF(X2.EQ.' ')X2=KEXT
IF(X2.NE.KEXT)GO TO 18
IF(IPU.LT.0)GO TO 121
IF(NAME2.EQ.'ALL')NAME2='99999'
12 IF(MORE.LT.0)GO TO 21
142 TYPE 16
ACCEPT 1,INP
X=' '
CALL NAMEXT(INP,IPAK,X)
IF(X.EQ.' ')X='PAK'
13 IF(LOOKX(IPAK,X).EQ.0)GO TO 10
TYPE 11
11 FORMAT(' WRITE OVER THAT NAME? '$)
ACCEPT 1,INP
IF(INP(1).NE.'Y')GO TO 12
10 CALL PUTEXT(IPAK,X)
CALL EXTOUT(NAMES,635)
C COME BACK AND FILL UP THE HEADER LATER.
21 NM=NAME
MORE=0
20 NMX=NM
NMZ=NM
KK=0
6 IF(IFI.EQ.0)GO TO 66
67 KK=KK+1
IF(KK.GT.JJ)GO TO 2000
NM=NAMES(KK)
KEXT=JEXT(KK)
66 IF(LOOKX(NM,KEXT).EQ.0)GO TO 1000
C JUMP IF NOT FOUND
7 CALL GETEXT(NM,KEXT)
CALL EXTIN(FIRST,128)
CALL EXTIN(SECOND,JWDS)
CALL STUFIT(SECOND,JWDS)
C GO MAKE PACKED VERSION OF DATA
JFLAG=-999
CALL EXTOUT(FIRST,128)
CALL EXTOUT(SECOND,JWDS)
TYPE 9,NM,KEXT
NAMES(IREC)=NM
JEXT(IREC)=KEXT
KREC=IREC
IREC=IREC+1
JREC(IREC)=JREC(IREC-1)+2+(JWDS-1)/128
C SAVE FOR USETI
IF(IFI.LT.0)GO TO 67
IF(IREC.LT.201)NAMES(IREC)=0
14 IF(NM.EQ.NAME2.OR.IREC.EQ.200)GO TO 2000
C LIMIT OF 200 FILES AT THIS TIME.
NM=NM+2
GO TO 6
1000 NM=NMX+256
C UPDATE 4TH CHAR. (E.G. AAAAA TO AAABA)
NMX=NM
IF(LOOKX(NM,KEXT).LT.0)GO TO 7
NM=NMZ+32768
C UPDATE 3RD CHAR. (E.G. AAAAA TO AABAA)
NMX=NM
NMZ=NM
IF(LOOKX(NM,KEXT).LT.0)GO TO 7
C NOW ALL DONE. REBUILD HEADER.
2001 FORMAT(' ADD MORE TO FILE? '$)
2000 TYPE 2001
ACCEPT 1,K
MORE=-1
IFI=0
IF(K.EQ.'Y')GO TO 2
CALL USTO(1)
CALL EXTOUT(NAMES,635)
CALL FINEXT
TYPE 8,IPAK,X,KREC
CALL EXIT
8 FORMAT(' ***** ALL DONE WRITING ',A5,'.',A3/5XI3,' FILES')
9 FORMAT(1XA5,'.',A3)
122 IPU=4
121 TYPE 111
111 FORMAT(' CHANGE EXTENSION TO -- (<CR>=NO CHANGE) '$)
112 FORMAT(A3)
ACCEPT 112,NEXT
IF(NEXT.NE.' ')KEXT=NEXT
113 CALL GETEXT(IPAK,X)
CALL EXTIN(NAMES,635)
IF(IPU.LE.0)GO TO 114
GO TO(109,2,118,3000)IPU
118 GO TO 18
115 FORMAT(' TYPE NEW NAME AND EXT. '$)
119 MEXT=' '
TYPE 115
ACCEPT 1,INP
CALL NAMEXT(INP,NAME2,MEXT)
IF(MEXT.EQ.' ')MEXT=KEXT
NMX=0
DO 116 K=1,200
NN=NAMES(K)
MM=JEXT(K)
IF(NAME.EQ.NN.AND.KEXT.EQ.MM)NMX=K
116 IF(NAME2.EQ.NN.AND.MEXT.EQ.MM)GO TO 117
IF(NMX.NE.0)GO TO 120
TYPE 102
CALL EXIT
120 NAMES(NMX)=NAME2
JEXT(NMX)=MEXT
CALL EXIT
CCCC GO WRITE NEW FORM OF .PAK FILE GO TO ????
117 TYPE 11
ACCEPT 1,JWDS
IF(JWDS.NE.'Y')GO TO 18
114 NM=NAME
NN=NM
105 DO 101 K=1,200
101 IF(NAMES(K).EQ.NAME)GO TO 108
NAME=NM+256
NM=NAME
DO 107 K=1,200
107 IF(NAMES(K).EQ.NAME)GO TO 108
NAME=NN+32768
NN=NAME
NM=NN
DO 177 K=1,200
177 IF(NAMES(K).EQ.NAME)GO TO 108
106 IF(INF.NE.0)TYPE 102
GO TO 18
102 FORMAT(' FILE NOT FOUND')
108 CALL USTI(JREC(K))
CALL EXTIN(FIRST,128)
CALL EXTIN(SECOND,JWDS)
C READ INTO SECOND ARRAY. IF JFLAG=-999 THEN UNDO PACKED FORMAT
TYPE 9,NAME,KEXT
INF=0
104 IF(LOOKX(NAME,KEXT).EQ.0)GO TO 103
C IS FILE ALREADY ON DSK?
TYPE 11
ACCEPT 1,K
IF(K.EQ.'Y')GO TO 103
TYPE 3
ACCEPT 1,INP
CALL NAMEXT(INP,NAME,KEXT)
GO TO 104
103 JF=JFLAG
JFLAG=0
IF(JF.EQ.-999)CALL UNSTUF(SECOND,V,JWDS)
CALL PUTEXT(NAME,KEXT)
CALL EXTOUT(FIRST,128)
IF(JF.EQ.-999)CALL EXTOUT(V,JWDS)
IF(JF.NE.-999)CALL EXTOUT(SECOND,JWDS)
C USE SECOND ARRAY FOR OLD FORMAT
CALL FINEXT
IF(NAME.EQ.NAME2)CALL EXIT
NAME=NAME+2
GO TO 105
3004 FORMAT(3XI3,' FILES'/)
109 TYPE 3004,KREC
DO 110 K=1,200
IF(NAMES(K).EQ.0)GO TO 18
110 TYPE 9,NAMES(K),JEXT(K)
GO TO 18
3000 DO 3001 K=1,200
NM=NAMES(K)
IF(NM.EQ.0)CALL EXIT
MM=JEXT(K)
IF(NEXT.NE.' ')MM=NEXT
CALL EXTIN(FIRST,128)
CALL EXTIN(SECOND,JWDS)
TYPE 9,NM,MM
3003 IF(LOOKX(NM,MM).EQ.0)GO TO 3002
TYPE 11
ACCEPT 1,L
IF(L.NE.'Y')GO TO 3001
3002 JF=JFLAG
JFLAG=0
IF(JF.EQ.-999)CALL UNSTUF(SECOND,V,JWDS)
CALL PUTEXT(NM,MM)
CALL EXTOUT(FIRST,128)
IF(JF.EQ.-999)CALL EXTOUT(V,JWDS)
IF(JF.NE.-999)CALL EXTOUT(SECOND,JWDS)
CALL FINEXT
3001 CONTINUE
END
SUBROUTINE NAMEXT(I,NAME,IEXT)
C FINDS NAME.EXT IN A1 STRING
DIMENSION I(1)
IF(I(1).NE.-1)GO TO 9
C FIRST PASS UP 'G', 'GM', 'RS', ETC. (=-1)
DO 1 K=1,72
1 IF(I(K).EQ.' ')GO TO 2
C NOW PASS BLANKS
2 J=72
DO 3 J=K+1,72
3 IF(I(J).NE.' ')GO TO 4
C NOW FOUND START OF WORD (UNLESS ALL BLANKS)
4 IF(J.NE.72)GO TO 5
NAME=' '
RETURN
9 J=1
5 DO 6 K=J,72
IF(I(K).EQ.' ')GO TO 7
C JUMP IF NAME ONLY
6 IF(I(K).EQ.'.')GO TO 8
7 CALL PACKX(NAME,I(J))
RETURN
8 CALL RLOOP(I(61),I(J),K-J)
CALL PACKX(NAME,I(61))
CALL PACKX(IEXT,I(K+1))
END
SUBROUTINE PACKX(NAM,KNM)
DIMENSION KNM(5)
DATA KK/128/,LL/"377777777777/,JJ/"2000000000/
1 , MM/"774000000000/
NAM=0
DO 12 K=5,1,-1
NAM=NAM .OR. (KNM(K) .AND. MM)
IF (K.EQ.1)RETURN
17 IF (NAM.GE.0)GO TO 13
NAM = (( NAM .AND. LL)/KK) .OR. JJ
GO TO 12
13 NAM = NAM / KK
12 CONTINUE
RETURN
END
SUBROUTINE FILE(N,IEXT,J)
DIMENSION N(1),IEXT(1)
1 FORMAT(A5,A2,A3)
2 FORMAT(1XA5,A2,A3)
3 FORMAT(' TYPE DIR.FILE NAME '$)
TYPE 3
ACCEPT 1,J
CALL IFILE(1,J)
READ(1,1)J
READ(1,1)J
J=1
4 READ(1,1,END=5)N(J),K,IEXT(J)
IF(N(J).EQ.' ')GO TO 4
J=J+1
GO TO 4
5 J=J-2
7 DO 8 K=1,J-1
IF(N(K).LT.N(K+1))GO TO 8
L=N(K+1)
N(K+1)=N(K)
N(K)=L
L=IEXT(K+1)
IEXT(K+1)=IEXT(K)
IEXT(K)=L
GO TO 7
8 CONTINUE
L=' '
DO 9 K=1,J
9 TYPE 2,N(K),L,IEXT(K)
N(J+1)=0
END